package interfacesRemotas;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;
import modelo.gestionCarta.Producto;
import modelo.gestionPedidos.Consumicion;
import modelo.gestionPedidos.Pedido;
import modelo.gestionReserva.Mesa;


/**
 * @author Eusebio J. Aguilera Aguilera
 * @date 03/05/2007
 * @version 1.0
 * Esta interfaz sirve para realizar la comunicación RMI entre las clases accesoPedido y las
 * que hagan uso de la misma.
 */
public interface InterfazPedido extends Remote {

	/**
	 * Devuelve el pedido mediante un identificador
	 * @param id
	 * @throws RemoteException
	 * @return Pedido
	 */
	public Pedido getPedido( int id ) throws RemoteException;
	
	/**
	 * Este método devuelve todos pedidos activos en el sistema
	 * @throws RemoteException
	 * @return Lista de pedidos
	 */
	public List<Pedido> getPedidos(int id) throws RemoteException;
	
	/**
	 * Este método devuelve un conjunto de mesas que son las que se ha seleccionado
	 * en el pedido
	 * @throws RemoteException
	 * @return Lisra de mesas
	 */
	public List<Mesa> getMesas(int idPedido) throws RemoteException;
	


	/**
	 * Este método inserta un pedido en el repositorio.
	 * @param numComensales Número de comensales de los que está compuesto el pedido.
	 * @param mesas Lista de las mesas que se ven afectadas por el pedido y que habrá que modificar.
	 * @param consumiciones Lista de consumiciones que contiene el pedido.
	 * @throws RemoteException
	 * @return Si la operación se ha llevado a cabo correctamente (true) o no (false)
	 */
	public boolean insertPedido( int idRestaurante,int numComensales, List<Mesa> listaMesas) throws RemoteException; 
	
	/**
	 * Este método inserta una consumición en la base de datos.
	 * @param estado Estado de la consumición.
	 * @param numComensales Número de comensales de la consumición.
	 * @param observaciones Observaciones de la petición.
	 * @param p Producto sobre el que se va a realizar la consumición.
	 * @throws RemoteException
	 * @return Si la operación se ha llevado a cabo correctamente (true) o no (false)
	 */
	public boolean insertConsumicion( int idProd,int idPedido,  int estado, int numComensal, String observaciones) throws RemoteException;
	
	/**
	 * Este método actualiza un pedido en el repositorio.
	 * @param cod Código del pedido a actualizar.
	 * @param numComensales Número de comensales que tiene el pedido modificado.
	 * @param mesas Lista de mesas que ahora están en el pedido.
	 * @param consumiciones Lista de consumiciones que están afectadas del pedido.
	 * @throws RemoteException
	 * @return Si la operación se ha llevado a cabo correctamente (true) o no (false)
	 */
	public boolean ampliarPedido( int cod, int numComensales, List<Mesa> mesas, List<Consumicion> consumiciones ) throws RemoteException;
	
	
	/**
	 * Este método actualiza una consumición que ha sido previamente creada.
	 * @param cod Código de la consumición que se va a modificar.
	 * @param estado Estado que se va a actualizar para la consumición.
	 * @param numComensales Número de comensales que se va a actualizar para la consumición.
	 * @param observaciones Observaciones que se va a actualizar para la consumición.
	 * @param p Producto que se va a actualizar para la consumición.
	 * @throws RemoteException
	 * @return Si la operación se ha llevado a cabo correctamente (true) o no (false)
	 */
	public boolean updateConsumicion( int cod, int estado, int numComensales, String observaciones, Producto p ) throws RemoteException;
	
	/**
	 * Borra un pedido de la base de datos de forma permanete.
	 * @param cod Código del pedido que se va a eliminar.
	 * @throws RemoteException
	 * @return Si la operación se ha llevado a cabo correctamente (true) o no (false)
	 */
	public boolean deletePedido( int cod ) throws RemoteException;
	
	
	/**
	 * Este método borra una consumición de un pedido.
	 * @param cod_consumición Código de la consumición
	 * @throws RemoteException 
	 * @return Si la operación se ha llevado a cabo correctamente (true) o no (false)
	 */
	public boolean deleteConsumicion( int cod_consumicion ) throws RemoteException;
	
	/**
	 * Se recuperan todas las consumiciones listas del pedido
	 * @param idPedido
	 * @return Lista  consumiciones listas
	 * @throws RemoteException
	 */
	public List<Consumicion> getConsumicionesListas(int idPedido) throws RemoteException;
	
}
